home *** CD-ROM | disk | FTP | other *** search
/ PCMania 64 / PCMania CD64_1.iso / phy / phy003 / lowlevel / efecto.asm < prev    next >
Encoding:
Assembly Source File  |  1997-02-23  |  3.4 KB  |  83 lines

  1. .MODEL TINY                     ;  Unassembled by Navi Dj.
  2. .CODE
  3.                 ORG     100h
  4.  
  5. Inicio: JMP     Loader
  6.  
  7. Criptado        DB      'F'+50, 'o'+50, 'r'+50, 'm'+50, 'a'+50, 't'+50, 'e'+50
  8.                 DB      'a'+50, 'n'+50, 'd'+50, 'o'+50, '.'+50, '.'+50, '.'+50
  9.                 DB      'E'+50, 's'+50, 'p'+50, 'e'+50, 'r'+50, 'a'+50, ' '
  10.                 DB      'p'+50, 'o'+50, 'r'+50, ' '   , 'f'+50, 'a'+50, 'v'+50
  11.                 DB      'o'+50, 'r'+50, '.'+50
  12. Temp            DB      01              ;  Variable usada por "interrupt".
  13.  
  14. Interrupt       PROC
  15. INT1Ch:         CLI                     ;  Prohibe interrupciones.
  16.                 PUSH    AX              ;  Guarda los registros afectados.
  17.                 PUSH    BX
  18.                 PUSH    CX
  19.                 PUSH    SI
  20.                 PUSH    DI
  21.                 PUSH    ES
  22.                 INC     BYTE PTR CS:[Temp]
  23.                 MOV     AX,0B800h
  24.                 MOV     ES,AX           ;  Pone en ES el segmento de la
  25.                 LEA     SI,[Criptado]   ; pantalla en modo texto.
  26.                 XOR     DI,DI           ;  En DS:SI trozo de memoria donde se
  27.                 MOV     CX,0031         ; almacena el encriptado.
  28.  
  29. DesencByte:     MOV     AL,CS:[SI]
  30.                 CMP     AL,20h          ;  Si el 1º byte es 20h no lo
  31.                 JZ      NoDesenc        ; desencripta.
  32.                 SUB     AL,32h          ;  El encriptado se resuelve restando 32h.
  33.  
  34. NoDesenc:       MOV     ES:[DI],AL      ;  Escribe en la esquina superior izquierda
  35.                 MOV     BYTE PTR ES:[DI+01h],1Fh; de la pantalla el byte leido y
  36.                 INC     SI              ; desencriptado (junto con un atributo
  37.                 ADD     DI,+02h         ; de color). [12]
  38.                 LOOP    DesencByte
  39.                 MOV     BX,0044h
  40.  
  41. OtraBarra:      MOV     AL,CS:[Temp]
  42.                 AND     AL,01111111b    ;  Elimina el MSB.
  43.                 OR      AL,00111000b    ;  Set a los bits 3, 4 y 5.
  44.                 MOV     BYTE PTR ES:[BX],'░'  ;  Escribe el caracter ░ para formar
  45.                 MOV     ES:[BX+01h],AL   ; las barras usando el color de AL.
  46.                 MOV     BYTE PTR ES:[BX+02h],'▒'
  47.                 MOV     ES:[BX+03h],AL   ;  Otro tercio de la barra.
  48.                 MOV     BYTE PTR ES:[BX+04h],'▓'
  49.                 MOV     ES:[BX+05h],AL  ;  Y el último tercio.
  50.                 ADD     BX,+14h         ;  Distancia las barras.
  51.                 CMP     BX,0FA0h        ;  Comprobamos si es la última.
  52.                 JBE     OtraBarra       ;  Si no es saltamos.
  53.  
  54.                 CMP     BYTE PTR CS:[Temp],0FFh
  55.                 JNZ     Regreso         ;  Si la variable temporal no ha 
  56.                 MOV     BYTE PTR CS:[Temp],01h  ; llegado al máximo.
  57.  
  58. Regreso:        POP     ES
  59.                 POP     DI
  60.                 POP     SI
  61.                 POP     CX
  62.                 POP     BX
  63.                 POP     AX
  64.                 STI
  65.                 IRET                    ;  Regresa al sistema.
  66. Interrupt       ENDP
  67.  
  68. Resi = $ - Offset Inicio
  69. Resi = (Resi / 16) + 1
  70.  
  71. Loader          PROC
  72.                 MOV     AX, CS
  73.                 MOV     DS, AX
  74.                 MOV     DX, Offset Interrupt
  75.                 MOV     AX, 251Ch
  76.                 INT     21h
  77.  
  78.                 MOV     AX, 3100h
  79.                 MOV     BX, Resi
  80.                 INT     21h
  81. Loader          ENDP
  82.                 END     Inicio
  83.